package answer_1_10

import (
	"fmt"
	"strconv"
)

//给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
//如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
//假设环境不允许存储 64 位整数（有符号或无符号）。

//示例 1：
//输入：x = 123
//输出：321

//示例 2：
//输入：x = -123
//输出：-321

//示例 3：
//输入：x = 120
//输出：21

//示例 4：
//输入：x = 0
//输出：0

//提示：
//-231 <= x <= 231 - 1

func Answer_7() {
	fmt.Println(reverse_1(123))
}

func reverse_1(x int) int {
	var s string
	isBig := true
	if x < 0 {
		x = -x
		isBig = false
		s = strconv.Itoa(x)
	} else {
		s = strconv.Itoa(x)
	}
	r := []rune(s)
	for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
		r[i], r[j] = r[j], r[i]
	}
	i, _ := strconv.Atoi(string(r))
	if !isBig {
		i = -i
	}
	if -2147483648 <= i && i <= 2147483648-1 {
		return i
	} else {
		return 0
	}
}

func reverse_2(x int) int {
	var res int
	for x != 0 {
		if temp := int32(res); (temp*10)/10 != temp {
			return 0
		}
		res = res*10 + x%10
		x = x / 10
	}
	return res
}
